package com.eltsistemas.controller.usuario;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.eltsistemas.controller.grupo.GrupoComPermissao;
import com.eltsistemas.dao.UsuarioDao;
import com.eltsistemas.hibernate.HibernateUtil;
import com.eltsistemas.modelo.Permissao;
import com.eltsistemas.modelo.Usuario;

@Controller
public class UsuarioAutentica {
	
	@RequestMapping(value={"/","/login"})
	public String login(String valor)
	{
		return "login";
	}
	
	@RequestMapping(value="/painel/index")
	public String index()
	{
		return "index";
	}
	
	@RequestMapping(value="/autentica")
	public String autentica(Usuario usuario, HttpSession httpSession, Model model)
	{
		//Iniciando conexao a abrindo uma transacao
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		UsuarioDao daoUsuario = new UsuarioDao(session);
		try
		{
			Usuario user = daoUsuario.valida(usuario);
			if( user != null)
			{
				httpSession.setAttribute("usuario_Logado",user );
				
				//Carrega todas as permissoes do grupo ao qual o usuario pertence
				List<Permissao> permissaoList = new GrupoComPermissao().getPermissaoOfGrupo(user.getGrupo());
				
				httpSession.setAttribute("permissaoList", permissaoList);
			
				//Finalizando conexao
				session.close();
				
				return "redirect:painel/index";
			}
			
			//Finalizando conexao
			session.close();
	
			return "redirect:login?valor=autentica";
		}
		catch(HibernateException e)
		{
			return "erro";
		}
	}
	
	@RequestMapping(value="/logout")
	public String logout(HttpSession session) 
	{
		session.invalidate();
		return "redirect:login";
	}

}
